import {getToken,setToken,removeToken} from '@/utils/auth' 
import {login,userInfo} from '@/api/user'
import {constantRoutes,resetRouter} from '@/router'

const state={
  // 用户token,从缓存中读取存储，实现持久化
  token:getToken(),
  // 存储用户基本资料
  userInfo:{},
  // 用户路由模块数据初始化
  // 注意：每个用户登录前都能访问静态路由的页面，只有在登录后才有不同权限访问不同页面，所以初始值应该为静态页面数据也就是constantRoutes
  routes:constantRoutes

}
const mutations={
  // 设置token,登录成功
  setToken(state,token){
    state.token=token
    // 进行缓存持久化
    setToken(token)
  },
  // 删除token，退出登录
  removeToken(state){
    // 清空vuex中的token
    state.token=null
    // 清除缓存持久化
    removeToken()

  },
  // 设置用户基本资料
  setUserInfo(state,userInfo){
    state.userInfo=userInfo
  },
  // 设置用户路由模块数据
  setRoutes(state,newRoutes){
    // 静态路由+动态路由
    state.routes=[...constantRoutes,...newRoutes]
  }
}
const actions={
  // 获取token
  async getLogin(context,data){
    console.log(data)
    // 调用登录接口
    const token=await login(data)
    console.log(token);
    context.commit('setToken',token) 
  },
  // 登录成功时获取用户资料
  async getUserInfo(context){
    const result=await userInfo()
    console.log(result);
    context.commit('setUserInfo',result)
    return result //返回数据,便于在路由权限中，根据登录用户里面的已有权限配置相应动态路由
  },
  // 退出登录
  logout(context){
    // 删除vuex和缓存中的token
    context.commit('removeToken')
    // 删除用户资料
    context.commit('setUserInfo',{})
    // 重置路由
    resetRouter()
  },


}

export default{
  namespaced:true,//开启命名空间
  state,
  mutations,
  actions

}